﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using SMA.GENTEv1;
using Telerik.Web.UI;

public partial class Protegidos_Administracao_Cadastros__popup_acpIncluirFrotaVeiculos : PageBase
{
    private const int ItemsPerRequest = 10;
    private int idmodelo = 0;

    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            if (Request.QueryString["IdVeiculo"] != null)
                idmodelo = int.Parse(Request.QueryString["IdVeiculo"].ToString());

            if (!IsPostBack)
            {
                CarregarCategoriaCNH();
                if (Request.QueryString["IdVeiculo"] != null)
                    PreencherDados(idmodelo);
            }
        }
        catch (Exception ex)
        {
            ExibirMensagem(true, ex.Message);
        }
    }

    #region Eventos
    protected void btnGravar_Click(object sender, EventArgs e)
    {
        try
        {
            Salvar();
            ExibirResultados(true);
            ExibirMensagem(false, "Operação efetuada com sucesso!");
        }
        catch (Exception ex)
        {
            ExibirMensagem(true, ex.Message);
        }
    }

    protected void btnFechar_Click(object sender, EventArgs e)
    {
        ClientScript.RegisterStartupScript(Page.GetType(), "mykey", "CloseAndRebind();", true);
    }

    protected void RadAjaxManager1_AjaxRequest(object sender, AjaxRequestEventArgs e)
    {
        //if (e.Argument == "RebindContrato")
        //{
        //    RadGrid2.MasterTableView.SortExpressions.Clear();
        //    RadGrid2.MasterTableView.GroupByExpressions.Clear();
        //    RadGrid2.MasterTableView.CurrentPageIndex = RadGrid2.MasterTableView.PageCount - 1;
        //    RadGrid2.Rebind();
        //    CarregarDadosContrato();
        //}
    }

    protected void rcbFabricante_ItemsRequested(object o, RadComboBoxItemsRequestedEventArgs e)
    {
        FrotaFabricante fabricante = new FrotaFabricante();
        List<FrotaFabricante> listFabricante = fabricante.SelectPor(e.Text);

        int itemOffset = e.NumberOfItems;
        int endOffset = Math.Min(itemOffset + ItemsPerRequest, listFabricante.Count);
        e.EndOfItems = endOffset == listFabricante.Count;

        for (int i = itemOffset; i < endOffset; i++)
        {
            rcbFabricante.Items.Add(new RadComboBoxItem(listFabricante[i].Descricao, listFabricante[i].IdFrotaFabricante.ToString()));
        }

        e.Message = GetStatusMessage(endOffset, listFabricante.Count);
    }

    protected void rcbClassificacao_ItemsRequested(object o, RadComboBoxItemsRequestedEventArgs e)
    {
        FrotaModeloClassificacao classificacao = new FrotaModeloClassificacao();
        List<FrotaModeloClassificacao> listClassificacao = classificacao.SelectPor(e.Text);

        int itemOffset = e.NumberOfItems;
        int endOffset = Math.Min(itemOffset + ItemsPerRequest, listClassificacao.Count);
        e.EndOfItems = endOffset == listClassificacao.Count;

        for (int i = itemOffset; i < endOffset; i++)
        {
            rcbClassificacao.Items.Add(new RadComboBoxItem(listClassificacao[i].Descricao, listClassificacao[i].IdFrotaModeloClassificacao.ToString()));
        }

        e.Message = GetStatusMessage(endOffset, listClassificacao.Count);
    }
    #endregion

    #region Metodos
    private void OcultaCampos(bool oculta)
    {
        btnGravar.Visible = !oculta;
    }

    private void ExibirResultados(bool oculta)
    {
        btnGravar.Visible = !oculta;

        trTitulo.Visible = !oculta;
        trFabricante.Visible = !oculta;
        trClassificacao.Visible = !oculta;
        trVeiculo.Visible = !oculta;
        trCategoriaCNH.Visible = !oculta;
    }

    private void PreencherDados(int _idmodelo)
    {
        RadComboBoxItem itemFabricante;
        RadComboBoxItem itemClassificacao;

        FrotaModelo modelo = new FrotaModelo(_idmodelo, true, true, true, true);
        FrotaFabricante fabricante = new FrotaFabricante();
        FrotaModeloClassificacao classif = new FrotaModeloClassificacao();

        int[] idfabricante = { modelo.Fabricante.IdFrotaFabricante };
        int[] idclassificacao = { modelo.Classificacao.IdFrotaModeloClassificacao };

        rcbFabricante.DataTextField = "Descricao";
        rcbFabricante.DataValueField = "IdFrotaFabricante";
        rcbFabricante.DataSource = fabricante.SelectPor(idfabricante);
        rcbFabricante.DataBind();
        
        rcbClassificacao.DataTextField = "Descricao";
        rcbClassificacao.DataValueField = "IdFrotaModeloClassificacao";
        rcbClassificacao.DataSource = classif.SelectPor(idclassificacao);
        rcbClassificacao.DataBind();

        itemFabricante = rcbFabricante.Items.FindItemByValue(modelo.Fabricante.IdFrotaFabricante.ToString());
        itemClassificacao = rcbClassificacao.Items.FindItemByValue(modelo.Classificacao.IdFrotaModeloClassificacao.ToString());

        rcbFabricante.SelectedIndex = itemFabricante.Index;
        rcbClassificacao.SelectedIndex = itemClassificacao.Index;
        txtVeiculo.Text = modelo.Descricao;

        string categoriasSel = "";
        foreach (RadComboBoxItem item in rcbCategoriaCNH.Items)
        {
            var consulta = (from categLista in modelo.CategoriaCNH
                            where categLista.IdCategoriaCNH == int.Parse(item.Value)
                            select new
                            {
                                categLista.IdCategoriaCNH,
                                categLista.Categoria
                            });

            if (consulta.ToList().Count == 0)
            {
                CheckBox chk = (CheckBox)item.FindControl("chk1");
                chk.Checked = false;
            }
            else
            {
                categoriasSel += string.Concat(",", consulta.ToList()[0].Categoria);
            }
        }
        if (categoriasSel != string.Empty)
            categoriasSel = categoriasSel.Substring(categoriasSel.IndexOf(",", 0) + 1);
        rcbCategoriaCNH.Text = categoriasSel;
    }

    private void CarregarCategoriaCNH()
    {
        CategoriaCNH categoria = new CategoriaCNH();
        rcbCategoriaCNH.DataSource = categoria.SelectAll();
        rcbCategoriaCNH.DataBind();
    }

    private void Salvar()
    {
        try
        {
            FrotaModelo modelo = new FrotaModelo();
            modelo.IdFrotaModelo = idmodelo;
            modelo.Fabricante = new FrotaFabricante(int.Parse(rcbFabricante.SelectedValue), false);
            modelo.Descricao = txtVeiculo.Text;
            modelo.Classificacao = new FrotaModeloClassificacao(int.Parse(rcbClassificacao.SelectedValue), false);

            List<CategoriaCNH> listCategoriaCNH = new List<CategoriaCNH>();
            foreach (RadComboBoxItem item in rcbCategoriaCNH.Items)
            {
                CheckBox chk = (CheckBox)item.FindControl("chk1");
                if (chk.Checked)
                {
                    CategoriaCNH categoria = new CategoriaCNH(int.Parse(item.Value), false);
                    listCategoriaCNH.Add(categoria);
                }
            }
            modelo.CategoriaCNH = listCategoriaCNH;

            modelo.Salvar();
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private void ExibirMensagem(bool _msgErro, string _textoMsg)
    {
        try
        {
            OcultaMsgPagina(false);
            if (_msgErro)
            {
                lblResultado.ForeColor = System.Drawing.Color.Red;
                lblResultado.Text = _textoMsg;
            }
            else
            {
                lblResultado.ForeColor = System.Drawing.Color.Black;
                lblResultado.Text = _textoMsg;
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private void OcultaMsgPagina(bool oculta)
    {
        trMensagem.Visible = !oculta;
    }

    private static string GetStatusMessage(int offset, int total)
    {
        if (total <= 0)
            return "No matches";

        return String.Format("Items <b>1</b>-<b>{0}</b> de <b>{1}</b>", offset, total);
    }
    #endregion

}
